package cn.bugstack.mybatis.session;

/**
 * description: sqlsession接口 SqlSession标准定义和实现
 * taskId：
 * <pre>
 * change history:
 * date             defect#             person                comments
 * ---------------------------------------------------------------------
 * 2024/9/4       ********         zhaochaoyue        create file
 * </pre>
 *
 * @author: zhaochaoyue
 * @date: 2024/9/4 17:12
 * @copyright: 2024
 */
public interface SqlSession {

    /**
     * 根据sqlId查询一条记录
     * @param statement sqlId
     * @param <T> 返回对象的类型
     * @return 封装之后的对象
     */
    <T> T selectOne(String statement);

    /**
     * 和上一个方法一样 这个方法可以给sql 传递一些参数
     * 实际应用中 这个参数传的是pojo 或者是map 或者 ImmutableMap
     * @param statement
     * @param parameter 参数
     * @param <T>
     * @return
     */
    <T> T selectOne(String statement,Object parameter);

    /**
     * 得到映射器 这个巧妙的使用了范型 使得类型安全
     * @param type mapper interface class
     * @param <T>  mapper type
     * @return mapper bound to this SqlSession
     */
    <T> T getMapper(Class<T> type);
 }
